#! /usr/bin/python
from nltk import PorterStemmer

class Constants:

    # Category names
    toys = "JUCARII"
    electronics = "ELECTRONICE"
    personal = "COSMETICE"
    books = "CARTI"
    cloths = "HAINE"
    music = "MUZICA"
    movies = "FILME"

    # Attribute names
    pound = 5.61
    price = "PRET"
    min_age = "V_MIN"
    max_age = "V_MAX"
    sex = "SEX"
    review_no = "REVIEW_NO"
    color = "CULOARE"
    gift_of_the_week = "FEATURED"
    features = "CARACTERISTICI"
    keywords = "KEYWORDS"
    colors = 'Navy|Purple|Blue|Red|Green|Yellow|Orange'

class Utils:
    #Hardcoded mess. These may go into a file :)
    stopwords = ["a", "about", "above", "after", "again", "against", "all", "am", "an", "and", "any", "are", "aren't", "as", "at", "be", "because", "been", "before", "being", "below", "between", "both", "but", "by", "can't", "cannot", "could", "couldn't", "did", "didn't", "do", "does", "doesn't", "doing", "don't", "down", "during", "each", "few", "for", "from", "further", "had", "hadn't", "has", "hasn't", "have", "haven't", "having", "he", "he'd", "he'll", "he's", "her", "here", "here's", "hers", "herself", "him", "himself", "his", "how", "how's", "i", "i'd", "i'll", "i'm", "i've", "if", "in", "into", "is", "isn't", "it", "it's", "its", "itself", "let's", "me", "more", "most", "mustn't", "my", "myself", "no", "nor", "not", "of", "off", "on", "once", "only", "or", "other", "ought", "our", "ours ", "ourselves", "out", "over", "own", "same", "shan't", "she", "she'd", "she'll", "she's", "should", "shouldn't", "so", "some", "such", "than", "that", "that's", "the", "their", "theirs", "them", "themselves", "then", "there", "there's", "these", "they", "they'd", "they'll", "they're", "they've", "this", "those", "through", "to", "too", "under", "until", "up", "very", "was", "wasn't", "we", "we'd", "we'll", "we're", "we've", "were", "weren't", "what", "what's", "when", "when's", "where", "where's", "which", "while", "who", "who's", "whom", "why", "why's", "with", "won't", "would", "wouldn't", "you", "you'd", "you'll", "you're", "you've", "your", "yours", "yourself", "yourselves", "nbsp"]

    sstem = PorterStemmer()

    def sortDictionary(self, dictionary):
        import operator
        sorted_dict = sorted(dictionary.iteritems(),
                key=operator.itemgetter(1), reverse=True)
        return sorted_dict

    def getKeywords(self, text):
        original_words = {}
        stem_counts = {}
        import re
        words = re.findall('\w+', text)

        for word in words:
            word = word.lower()
            if word.lower() in self.stopwords:
                continue
            if word.isdigit():
                continue
            if len(word) == 1:
                continue
            stem_word = self.sstem.stem(word)
            if stem_word in original_words:
                counts = stem_counts[stem_word]
                counts += 1
                del(stem_counts[stem_word])
                stem_counts[stem_word] = counts
            else:
                stem_counts[stem_word] = 1
                original_words[stem_word] = word.lower()

        sorted_dict = self.sortDictionary(stem_counts)

        return sorted_dict, original_words

    def get_no_of_keywords(self, text, how_many):
        sorted_dict, original_words = self.getKeywords(text)
        count = -1
        keywords = ""

        for key in sorted_dict:
            count += 1;
            if count == how_many:
                break
            word = original_words[key[0]]
            keywords += word + " "

        return keywords

    def printWordDictionary(self, dictionary):
        print "Word dictionary: "
        for key in dictionary:
            print "%s - %s" %(key, dictionary[key])
